package com.daisuxia.web.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.daisuxia.back.utils.ServiceResult;
import com.daisuxia.risk.pojo.RiskCreditUser;
import com.daisuxia.web.pojo.BorrowOrder;
import com.daisuxia.web.pojo.User;
import com.daisuxia.web.pojo.UserLimitRecord;
import com.daisuxia.web.util.PageConfig;

/**
 * 
 * @ClassName: IBorrowService.java
 * @Description: TODO
 * @author zhangjb
 * @version V1.0
 * @Date 2016年12月12日 下午7:22:16
 */
public interface IBorrowOrderService {

	/**
	 * 根据条件查找借款
	 * 
	 * @param params
	 * @return
	 */
	public List<BorrowOrder> findAll(HashMap<String, Object> params);

	/**
	 * 根据主键查找一条
	 * 
	 * @param params
	 * @return
	 */
	public BorrowOrder findOneBorrow(Integer id);
	/**
	 * 根据第三方订单流水号查找一条
	 * 
	 * @param params
	 * @return
	 */
	public BorrowOrder findOneBorrowByOutTradeNo(String outTradeNo);

	/**
	 * 根据主键删除对象
	 * 
	 * @param id
	 */
	public void deleteById(Integer id);

	/**
	 * 插入 对象
	 * 
	 * @param backUser
	 */
	public void insert(BorrowOrder borrowOrder);

	/**
	 * 更新 象
	 * 
	 * @param backUser
	 */
	public void updateById(BorrowOrder borrowOrder);
	
	/**
	 * 更新 象
	 * 
	 * @param backUser
	 */
	public void authBorrowState(BorrowOrder borrowOrder);

	/**
	 * 分页查询
	 * 
	 * @param params
	 * @return
	 */
	PageConfig<BorrowOrder> findPage(HashMap<String, Object> params);
	
	public Map<String, Object> saveLoan(Map<String, String> params,User user);
    /**
     * 计算用户借款服务费  
     * @param configParams
     * @param money  单位：分
     * @return
     */
	public Map<String,Integer> calculateApr(Integer money,Integer period);
	
	
	//************************用户额度管理
	/**
	 * 提額
	 * 
	 * @param backUser
	 */
	public void addUserLimit(User user);
	/**
	 * 修改额度
	 * @param mapParam userId，newAmountMax
	 */
	public void changeUserLimit(HashMap<String,Object> mapParam);
	
	/**
	 * 分页查询
	 * 
	 * @param params
	 * @return
	 */
	PageConfig<UserLimitRecord> finduserLimitPage(HashMap<String, Object> params);
	/**
	 * 查询用户最近借款信息,状态大于20
	 * @param parseInt
	 * @return
	 */
	public BorrowOrder selectBorrowOrderUseId(Integer userId);
	 /**
     * 检查当前用户是否存在未还款完成的订单
     * @param userId
     * @return 1：是；0：否
     */
    public Integer checkBorrow(Integer userId);
    
    /**
	 * 查询用户最近借款信息 任何状态 最新为准
	 * @param parseInt
	 * @return
	 */
	public BorrowOrder selectBorrowOrderNowUseId(Integer userId);
    
	/**
	 * 更新risk
	 * 
	 * @param  riskCreditUser
	 */
	public void updateRiskCreditUserById(RiskCreditUser  riskCreditUser);
	/**
	 * 根据用户查询申请列表
	 * @param userId
	 * @return
	 */
	List<BorrowOrder> findByUserId(Integer userId);
	 
	/**
	 * 请求打款
	 * 
	 * @param borrowOrder
	 */
	public void requestPay(BorrowOrder borrowOrder);
	
	/**
	 * 请求打款（非招行）
	 * 
	 * @param borrowOrders
	 */
	public void requestPaysNotCmbUser(List<BorrowOrder> borrowOrders);
	
	/**
	 * 请求打款(招商用户)
	 * 
	 * @param borrowOrders
	 */
	public void requestPaysCmbUser(List<BorrowOrder> borrowOrders);
	
	
	/**
	 * 请求打款(非招商)
	 * 
	 * @param borrowOrders
	 */
	public ServiceResult subPayNotCmb(List<BorrowOrder> borrowOrders,String subType);
	/**
	 * 请求打款(招商)
	 * 
	 * @param borrowOrders
	 */
	public ServiceResult subPayCmb(List<BorrowOrder> borrowOrders,String subType);
	/**
	 * 统计借款记录数
	 * @param params
	 * @return
	 */
	public int findParamsCount(HashMap<String, Object> params);
	
    /**
     * 查询当前用户最近一次审核失败的订单
     * @param params
     * @return
     */
    Map<String,String> findAuditFailureOrderByUserId(String userId);
}
